package com.zhendong.gulimall.auth;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;


/**
 * Spring Session 核心原理
 * @EnableRedisHttpSession 导入RedisHttpSessionConfiguration配置
 *      1、给容器中添加一个组件RedisOperationsSessionRepository ==> 用redis来操作session，session的增删改查都由redis来做【Repository这样的bean都是用在持久层的】
 *  RedisHttpSessionConfiguration 又extends SpringHttpSessionConfiguration，在其中有个
 *      2、SessionRepositoryFilter ==> Filter:session存储过滤器：每个请求都必须经过filter
 *              1、创建的时候就已经获得了sessionRepository【它只有一个有参构造，而且这里的sessionRepository已经被redis来操作了】
 *              2、原始的request和response都被wrapper包装过了【在doFilterInternal方法中】
 *              3、以后要获取session时候，肯定也是用原生的request.getSession();
 *              4、但是因为request已经被包装过了，真正调用的是wrappedRequest.getSession()。==>这个方法中通过id找各种操作来找session都是在sessionRepository中获取到的
 *
 *
 * 装饰者模式
 * 自动延期 redis中的数据是有过期时间的
 */
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallAuthServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallAuthServerApplication.class, args);
    }

}
